package com.helin.helinhealth.utils;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;

/**
 * 密码编码工具类
 * 
 * <p>
 * 该工具类用于密码的加密和验证，基于Spring Security的BCrypt算法。
 * BCrypt是一种单向加密算法，用于安全存储密码，防止密码泄露风险。
 * </p>
 */
@Component
public class PasswordEncoder {
    
    /**
     * BCrypt密码编码器，Spring Security提供
     */
    private final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
    
    /**
     * 将明文密码加密
     * 
     * <p>
     * 使用BCrypt算法对明文密码进行加密，每次加密结果不同，
     * 但都可以通过matches方法验证。
     * </p>
     * 
     * @param rawPassword 明文密码
     * @return 加密后的密码
     */
    public String encode(String rawPassword) {
        return encoder.encode(rawPassword);
    }
    
    /**
     * 验证明文密码是否与加密密码匹配
     * 
     * <p>
     * 用于登录验证，检查用户输入的明文密码是否与数据库中
     * 存储的加密密码匹配。
     * </p>
     * 
     * @param rawPassword 明文密码
     * @param encodedPassword 加密密码
     * @return 是否匹配
     */
    public boolean matches(String rawPassword, String encodedPassword) {
        return encoder.matches(rawPassword, encodedPassword);
    }
} 